// var i;
// var $uI_BulletMove_UIBindings = require("./UI_BulletMove_UIBindings");
// var $bundleConfig = require("./BundleConfig");
// var $resKeeper = require("./ResKeeper");
// var $gameGlobalVariable = require("./GameGlobalVariable");
// var $nodePoolMag = require("./NodePoolMag");
// var $buffMag = require("./BuffMag");
// var $uI_BulletBomb = require("./UI_BulletBomb");
// var _ = cc._decorator;
// var y = _.ccclass;
// var m = _.property;
// var v = _.inspector;
// var b = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t.auto_ui = null;
//         t.bulletId = 1;
//         t.img = null;
//         t.attack = 0;
//         t.attackfang = null;
//         t.isbaoji = !1;
//         t.nowpos = null;
//         t.issend = !1;
//         t.moveindex = 5;
//         t.isChaoJi = !1;
//         t.languajiaodus = [];
//         t.chongjiNode = null;
//         t.bulletspeed = 7;
//         return t;
//     }
//     __extends(t, e);
//     t.prototype.initBullet = function (e) {
//         return __awaiter(this, void 0, void 0, function () {
//             var t;
//             var o;
//             var n;
//             var i;
//             return __generator(this, function (a) {
//                 switch (a.label) {
//                     case 0:
//                         this.node.angle = 0;
//                         this.attack = e.attack;
//                         this.attackfang = e.playerId;
//                         this.isbaoji = e.isbaoji;
//                         this.moveindex = 5;
//                         this.node.scale = 1;
//                         this.isChaoJi = !1;
//                         this.cleanChongJiEff();
//                         if ($buffMag.BuffMgr.getLiuLianBuff(this.attackfang)) {
//                             this.isChaoJi = !0;
//                             this.node.scale = 1.7;
//                             this.addChongJiEff();
//                         }
//                         this.issend = !0;
//                         this.languajiaodus = [];
//                         if ($buffMag.BuffMgr.getLiuLianBomb(this.attackfang)) {
//                             t = this.getThreeUniqueRandomNumbers([0, 200], [300, 360]);
//                             for (o = 0; o < t.length; o++) {
//                                 this.languajiaodus.push({
//                                     jiaodu: t[o],
//                                     ishave: !1
//                                 });
//                             }
//                         }
//                         n = 1;
//                         if (e && 4 == e.playerLevel) {
//                             n = 5;
//                         }
//                         return [
//                             4,
//                             this._loadRes($bundleConfig.BundleNames.Common, "res/player/player7_" + n, cc.SpriteFrame)
//                         ];
//                     case 1:
//                         i = a.sent();
//                         this.img.spriteFrame = i;
//                         console.log("当前随机角度", this.languajiaodus);
//                         return [2];
//                 }
//             });
//         });
//     };
//     t.prototype.onDisable = function () {
//         this.cleanChongJiEff();
//     };
//     t.prototype.addChongJiEff = function () {
//         return __awaiter(this, void 0, void 0, function () {
//             var e;
//             return __generator(this, function (t) {
//                 switch (t.label) {
//                     case 0:
//                         this.chongjiNode = $nodePoolMag.NodePoolMag.instance.getNode("chongji");
//                         return this.chongjiNode
//                             ? [3, 2]
//                             : [
//                                   4,
//                                   this._loadRes($bundleConfig.BundleNames.Game, "prefabs/effpre/UI_ChongJi", cc.Prefab)
//                               ];
//                     case 1:
//                         e = t.sent();
//                         $nodePoolMag.NodePoolMag.instance.createNodeCount("chongji", 1, e);
//                         this.chongjiNode = $nodePoolMag.NodePoolMag.instance.getNode("chongji");
//                         t.label = 2;
//                     case 2:
//                         this.chongjiNode.x = -40;
//                         this.chongjiNode.y = 0;
//                         this.auto_ui.node_effNode.addChild(this.chongjiNode);
//                         return [2];
//                 }
//             });
//         });
//     };
//     t.prototype.cleanChongJiEff = function () {
//         if (this.chongjiNode) {
//             $nodePoolMag.NodePoolMag.instance.recycleNode("chongji", this.chongjiNode);
//             this.chongjiNode = null;
//         }
//     };
//     t.prototype.hideBullet = function () {
//         this.issend = !1;
//         this.cleanChongJiEff();
//         $nodePoolMag.NodePoolMag.instance.recycleNode("bullet_3", this.node);
//     };
//     t.prototype.getRandomInt = function (e, t) {
//         return Math.floor(Math.random() * (t - e + 1)) + e;
//     };
//     t.prototype.getThreeUniqueRandomNumbers = function (e, t) {
//         var o = [];
//         for (var n = e[0]; n <= e[1]; n++) {
//             o.push(n);
//         }
//         for (n = t[0]; n <= t[1]; n++) {
//             o.push(n);
//         }
//         for (var i = []; i.length < 2; ) {
//             var a = o[this.getRandomInt(0, o.length - 1)];
//             if (!i.includes(a)) {
//                 i.push(a);
//             }
//         }
//         return i;
//     };
//     t.prototype.createLanGua = function () {
//         var e = this;
//         var t = this.node.parent;
//         if (t) {
//             var o = cc.Vec2.subtract(cc.v2(), this.node.getPosition(), t.getPosition());
//             var n = Math.atan2(o.y, o.x);
//             var i = (180 / Math.PI) * n + 180;
//             var a = function (t) {
//                 var o = r.languajiaodus[t];
//                 if (!o.ishave) {
//                     var n = o.jiaodu;
//                     if (Math.abs(i - n) <= 10) {
//                         o.ishave = !0;
//                         var a = r.node.x;
//                         var c = r.node.y;
//                         r.scheduleOnce(function () {
//                             e.createBulletBomb(cc.v2(a, c));
//                         });
//                         r.languajiaodus[t] = o;
//                     }
//                 }
//             };
//             var r = this;
//             for (var c = 0; c < this.languajiaodus.length; c++) {
//                 a(c);
//             }
//         }
//     };
//     t.prototype.createBulletBomb = function (e) {
//         return __awaiter(this, void 0, void 0, function () {
//             var t;
//             var o;
//             var n;
//             var i;
//             return __generator(this, function (a) {
//                 switch (a.label) {
//                     case 0:
//                         if ((t = $nodePoolMag.NodePoolMag.instance.getNode("bullet_2"))) {
//                             return [3, 2];
//                         } else {
//                             return [
//                                 4,
//                                 this._loadRes($bundleConfig.BundleNames.Game, "prefabs/bullet/bullet2", cc.Prefab)
//                             ];
//                         }
//                     case 1:
//                         o = a.sent();
//                         $nodePoolMag.NodePoolMag.instance.createNodeCount("bullet_2", 1, o);
//                         t = $nodePoolMag.NodePoolMag.instance.getNode("bullet_2");
//                         a.label = 2;
//                     case 2:
//                         t.x = e.x;
//                         t.y = e.y;
//                         $gameGlobalVariable.GameGlobalVariable.languaNode.addChild(t);
//                         t.scale = 0;
//                         cc.tween(t)
//                             .to(0.2, {
//                                 scale: 1
//                             })
//                             .start();
//                         n = t.getComponent($uI_BulletBomb.default);
//                         i = $buffMag.BuffMgr.getLiuLianBomb(this.attackfang);
//                         n.initBullet(
//                             {
//                                 attack: this.attack * $gameGlobalVariable.GameGlobalVariable.liulianlanguabomb,
//                                 attackfanwei: i.value[0],
//                                 playerId: this.attackfang,
//                                 skinlevel: 4,
//                                 isbaoji: this.isbaoji
//                             },
//                             cc.v2(e.x, e.y)
//                         );
//                         return [2];
//                 }
//             });
//         });
//     };
//     t.prototype.sendBullet1 = function () {
//         var e = this;
//         var t = $gameGlobalVariable.GameGlobalVariable.paths.children[this.moveindex];
//         if (t) {
//             if (5 == this.moveindex) {
//                 this.node.x = t.x;
//                 this.node.y = t.y;
//                 this.moveindex -= 1;
//             } else {
//                 {
//                     !(function o(n) {
//                         if ((t = $gameGlobalVariable.GameGlobalVariable.paths.children[e.moveindex])) {
//                             var i = cc.Vec2.subtract(cc.v2(), cc.v2(t.x, t.y), e.node.getPosition());
//                             var a = Math.atan2(i.y, i.x);
//                             var r = cc.Vec2.distance(e.node.getPosition(), cc.v2(t.x, t.y));
//                             var c = n;
//                             var s = 0;
//                             if (r < c) {
//                                 s = c - r;
//                                 c = r;
//                             }
//                             e.node.x += Math.cos(a) * c;
//                             e.node.y += Math.sin(a) * c;
//                             if (s > 0) {
//                                 e.moveindex -= 1;
//                                 o(s);
//                             }
//                         } else {
//                             e.hideBullet();
//                         }
//                     })(this.getBulletSpeed());
//                 }
//             }
//             this.updateDir();
//         } else {
//             this.hideBullet();
//         }
//     };
//     t.prototype.updateDir = function () {
//         switch (this.moveindex) {
//             case 4:
//                 this.auto_ui.node_effNode.angle = 0;
//                 break;
//             case 3:
//                 this.auto_ui.node_effNode.angle = -90;
//                 break;
//             case 2:
//                 this.auto_ui.node_effNode.angle = 180;
//                 break;
//             case 1:
//                 this.auto_ui.node_effNode.angle = 90;
//                 break;
//             case 0:
//                 this.auto_ui.node_effNode.angle = 0;
//         }
//     };
//     t.prototype.getBulletAttack = function () {
//         return this.attack;
//     };
//     t.prototype.getBulletSpeed = function () {
//         this.bulletspeed = this.bulletspeed * $gameGlobalVariable.GameGlobalVariable.jiasuState;
//         return this.bulletspeed;
//     };
//     t.prototype.onUpdate = function () {
//         if (this.issend) {
//             this.node.children[0].angle += this.getBulletSpeed();
//             this.sendBullet1();
//             if (this.attackfang.playerInfo.equipLevel >= 4) {
//                 this.createLanGua();
//             }
//         }
//     };
//     __decorate([m($uI_BulletMove_UIBindings.default)], t.prototype, "auto_ui", void 0);
//     __decorate([m()], t.prototype, "bulletId", void 0);
//     __decorate([m(cc.Sprite)], t.prototype, "img", void 0);
//     return __decorate([y], t);
// })($resKeeper.default);
// exports.default = b;


// import UI_BulletMove_UIBindings from "./UI_BulletMove_UIBindings";
// import {BundleNames} from "./BundleConfig";
// import ResKeeper from "./ResKeeper";
// import { GameGlobalVariable } from "./GameGlobalVariable";
// import { NodePoolMag } from "./NodePoolMag";
// import UI_BulletBomb from "./UI_BulletBomb";
// import { BuffMgr } from './BuffMag';

// const { ccclass, property, inspector } = cc._decorator;

// /**
//  * 建议类名：Bullet
//  */
// @ccclass
// class UI_BulletMove extends ResKeeper {
//     @property(UI_BulletMove_UIBindings)
//     auto_ui: any = null;

//     @property
//     bulletId: number = 1;

//     @property(cc.Sprite)
//     img: cc.Sprite = null;

//     attack: number = 0;
//     attackfang: any = null;
//     isbaoji: boolean = false;
//     nowpos: any = null;
//     issend: boolean = false;
//     moveindex: number = 5;
//     isChaoJi: boolean = false;
//     languajiaodus: Array<{ jiaodu: number, ishave: boolean }> = [];
//     chongjiNode: cc.Node = null;
//     bulletspeed: number = 7;

//     /**
//      * 初始化子弹
//      * @param e 子弹参数
//      * 建议方法名：initializeBullet
//      */
//     async initBullet(e: any): Promise<void> {
//         this.node.angle = 0;
//         this.attack = e.attack;
//         this.attackfang = e.playerId;
//         this.isbaoji = e.isbaoji;
//         this.moveindex = 5;
//         this.node.scale = 1;
//         this.isChaoJi = false;
//         this.cleanChongJiEff();

//         if (BuffMgr.getLiuLianBuff(this.attackfang)) {
//             this.isChaoJi = true;
//             this.node.scale = 1.7;
//             this.addChongJiEff();
//         }

//         this.issend = true;
//         this.languajiaodus = [];

//         if (BuffMgr.getLiuLianBomb(this.attackfang)) {
//             const randomAngles = this.getThreeUniqueRandomNumbers([0, 200], [300, 360]);
//             for (let angle of randomAngles) {
//                 this.languajiaodus.push({ jiaodu: angle, ishave: false });
//             }
//         }

//         let skinLevel = 1;
//         if (e && e.playerLevel === 4) {
//             skinLevel = 5;
//         }

//         const spriteFrame = await this._loadRes(BundleNames.Common, `res/player/player7_${skinLevel}`, cc.SpriteFrame);
//         this.img.spriteFrame = spriteFrame;
//         console.log("当前随机角度", this.languajiaodus);
//     }

//     /**
//      * 当节点禁用时清理冲击效果
//      * 建议方法名：onNodeDisable
//      */
//     onDisable(): void {
//         this.cleanChongJiEff();
//     }

//     /**
//      * 添加冲击效果
//      * 建议方法名：addImpactEffect
//      */
//     async addChongJiEff(): Promise<void> {
//         this.chongjiNode = NodePoolMag.instance.getNode("chongji");
//         if (!this.chongjiNode) {
//             const prefab = await this._loadRes(BundleNames.Game, "prefabs/effpre/UI_ChongJi", cc.Prefab);
//             NodePoolMag.instance.createNodeCount("chongji", 1, prefab);
//             this.chongjiNode = NodePoolMag.instance.getNode("chongji");
//         }
//         this.chongjiNode.x = -40;
//         this.chongjiNode.y = 0;
//         this.auto_ui.node_effNode.addChild(this.chongjiNode);
//     }

//     /**
//      * 清理冲击效果
//      * 建议方法名：clearImpactEffect
//      */
//     cleanChongJiEff(): void {
//         if (this.chongjiNode) {
//             NodePoolMag.instance.recycleNode("chongji", this.chongjiNode);
//             this.chongjiNode = null;
//         }
//     }

//     /**
//      * 隐藏子弹
//      * 建议方法名：hideBullet
//      */
//     hideBullet(): void {
//         this.issend = false;
//         this.cleanChongJiEff();
//         NodePoolMag.instance.recycleNode("bullet_3", this.node);
//     }

//     /**
//      * 获取随机整数
//      * @param min 最小值
//      * @param max 最大值
//      * @returns 随机整数
//      * 建议方法名：getRandomInteger
//      */
//     getRandomInt(min: number, max: number): number {
//         return Math.floor(Math.random() * (max - min + 1)) + min;
//     }

//     /**
//      * 获取三个唯一的随机数
//      * @param range1 范围1
//      * @param range2 范围2
//      * @returns 随机数数组
//      * 建议方法名：getThreeUniqueRandomNumbers
//      */
//     getThreeUniqueRandomNumbers(range1: [number, number], range2: [number, number]): number[] {
//         const numbers: number[] = [];
//         for (let i = range1[0]; i <= range1[1]; i++) {
//             numbers.push(i);
//         }
//         for (let i = range2[0]; i <= range2[1]; i++) {
//             numbers.push(i);
//         }
//         const uniqueNumbers: number[] = [];
//         while (uniqueNumbers.length < 3) {
//             const randomNum = numbers[this.getRandomInt(0, numbers.length - 1)];
//             if (!uniqueNumbers.includes(randomNum)) {
//                 uniqueNumbers.push(randomNum);
//             }
//         }
//         return uniqueNumbers;
//     }

//     /**
//      * 创建兰瓜
//      * 建议方法名：createLanGua
//      */
//     createLanGua(): void {
//         const parent = this.node.parent;
//         if (parent) {
//             const direction = cc.Vec2.subtract(cc.v2(), this.node.getPosition(), parent.getPosition());
//             const angle = (180 / Math.PI) * Math.atan2(direction.y, direction.x) + 180;

//             const checkAngle = (index: number) => {
//                 const langua = this.languajiaodus[index];
//                 if (!langua.ishave) {
//                     const languaAngle = langua.jiaodu;
//                     if (Math.abs(angle - languaAngle) <= 10) {
//                         langua.ishave = true;
//                         const posX = this.node.x;
//                         const posY = this.node.y;
//                         this.scheduleOnce(() => {
//                             this.createBulletBomb(cc.v2(posX, posY));
//                         });
//                         this.languajiaodus[index] = langua;
//                     }
//                 }
//             };

//             for (let i = 0; i < this.languajiaodus.length; i++) {
//                 checkAngle(i);
//             }
//         }
//     }

//     /**
//      * 创建子弹爆炸
//      * @param position 爆炸位置
//      * 建议方法名：createBulletExplosion
//      */
//     async createBulletBomb(position: cc.Vec2): Promise<void> {
//         let bulletNode = NodePoolMag.instance.getNode("bullet_2");
//         if (!bulletNode) {
//             const prefab = await this._loadRes(BundleNames.Game, "prefabs/bullet/bullet2", cc.Prefab);
//             NodePoolMag.instance.createNodeCount("bullet_2", 1, prefab);
//             bulletNode = NodePoolMag.instance.getNode("bullet_2");
//         }
//         bulletNode.x = position.x;
//         bulletNode.y = position.y;
//         GameGlobalVariable.languaNode.addChild(bulletNode);
//         bulletNode.scale = 0;
//         cc.tween(bulletNode).to(0.2, { scale: 1 }).start();

//         const bulletComponent = bulletNode.getComponent(UI_BulletBomb);
//         const bombBuff = BuffMgr.getLiuLianBomb(this.attackfang);
//         bulletComponent.initBullet({
//             attack: this.attack * GameGlobalVariable.liulianlanguabomb,
//             attackfanwei: bombBuff.value[0],
//             playerId: this.attackfang,
//             skinlevel: 4,
//             isbaoji: this.isbaoji
//         }, cc.v2(position.x, position.y));
//     }

//     /**
//      * 发送子弹1
//      * 建议方法名：sendBullet1
//      */
//     sendBullet1(): void {
//         const targetNode = GameGlobalVariable.paths.children[this.moveindex];
//         if (targetNode) {
//             if (this.moveindex === 5) {
//                 this.node.x = targetNode.x;
//                 this.node.y = targetNode.y;
//                 this.moveindex -= 1;
//             } else {
//                 const moveBullet = (remainingDistance: number) => {
//                     const targetNode = GameGlobalVariable.paths.children[this.moveindex];
//                     if (targetNode) {
//                         const direction = cc.Vec2.subtract(cc.v2(), cc.v2(targetNode.x, targetNode.y), this.node.getPosition());
//                         const angle = Math.atan2(direction.y, direction.x);
//                         const distance = cc.Vec2.distance(this.node.getPosition(), cc.v2(targetNode.x, targetNode.y));
//                         let moveDistance = remainingDistance;
//                         let remainingMoveDistance = 0;

//                         if (distance < moveDistance) {
//                             remainingMoveDistance = moveDistance - distance;
//                             moveDistance = distance;
//                         }

//                         this.node.x += Math.cos(angle) * moveDistance;
//                         this.node.y += Math.sin(angle) * moveDistance;

//                         if (remainingMoveDistance > 0) {
//                             this.moveindex -= 1;
//                             moveBullet(remainingMoveDistance);
//                         }
//                     } else {
//                         this.hideBullet();
//                     }
//                 };

//                 moveBullet(this.getBulletSpeed());
//             }
//             this.updateDir();
//         } else {
//             this.hideBullet();
//         }
//     }

//     /**
//      * 更新方向
//      * 建议方法名：updateDirection
//      */
//     updateDir(): void {
//         switch (this.moveindex) {
//             case 4:
//                 this.auto_ui.node_effNode.angle = 0;
//                 break;
//             case 3:
//                 this.auto_ui.node_effNode.angle = -90;
//                 break;
//             case 2:
//                 this.auto_ui.node_effNode.angle = 180;
//                 break;
//             case 1:
//                 this.auto_ui.node_effNode.angle = 90;
//                 break;
//             case 0:
//                 this.auto_ui.node_effNode.angle = 0;
//                 break;
//         }
//     }

//     /**
//      * 获取子弹攻击力
//      * @returns 子弹攻击力
//      * 建议方法名：getBulletAttack
//      */
//     getBulletAttack(): number {
//         return this.attack;
//     }

//     /**
//      * 获取子弹速度
//      * @returns 子弹速度
//      * 建议方法名：getBulletSpeed
//      */
//     getBulletSpeed(): number {
//         this.bulletspeed *= GameGlobalVariable.jiasuState;
//         return this.bulletspeed;
//     }

//     /**
//      * 更新方法
//      * 建议方法名：onUpdate
//      */
//     onUpdate(deltaTime: number): void {
//         if (this.issend) {
//             this.node.children[0].angle += this.getBulletSpeed();
//             this.sendBullet1();
//             if (this.attackfang.playerInfo.equipLevel >= 4) {
//                 this.createLanGua();
//             }
//         }
//     }
// }

// export default UI_BulletMove;

import UIBulletMoveUIBindings from "./UI_BulletMove_UIBindings";
import { BundleNames } from "./BundleConfig";
import ResKeeper from "./ResKeeper";
import { GameGlobalVariable } from "./GameGlobalVariable";
import { NodePoolMag } from "./NodePoolMag";
import ViewBulletBomb from "./UI_BulletBomb";
import { BuffMgr } from './BuffMag';

const { ccclass, property, inspector } = cc._decorator;

/**
 * 建议类名：Bullet
 */
@ccclass
class ViewBulletMove extends ResKeeper {
    @property(UIBulletMoveUIBindings)
    auto_ui: UIBulletMoveUIBindings = null;

    @property
    bulletId: number = 1;

    @property(cc.Sprite)
    img: cc.Sprite = null;

    // 子弹攻击力
    attack: number = 0;

    // 攻击者Id
    attackfang: any = null;

    // 是否暴击
    isbaoji: boolean = false;

    // 当前子弹位置
    nowpos: any = null;

    // 是否发射
    issend: boolean = false;

    // 移动索引
    moveindex: number = 5;

    // 是否超级
    isChaoJi: boolean = false;

    // 乱挂角度数组
    private languajiaodus: Array<{ angle: number, has: boolean }> = [];

    // 冲击节点
    private chongjiNode: cc.Node = null;

    // 子弹速度
    bulletspeed: number = 7;

    /**
     * 初始化子弹
     * @param params 子弹参数
     * 建议方法名：initializeBullet
     */
    async initializeBullet(params: any): Promise<void> {
        this.node.angle = 0;
        this.attack = params.attack;
        this.attackfang = params.playerId;
        this.isbaoji = params.isbaoji;
        this.moveindex = 5;
        this.node.scale = 1;
        this.isChaoJi = false;
        this.clearImpactEffect();

        if (BuffMgr.getDurianBuff(this.attackfang)) {
            this.isChaoJi = true;
            this.node.scale = 1.7;
            this.addImpactEffect();
        }

        this.issend = true;
        this.languajiaodus = [];

        if (BuffMgr.getDurianBomb(this.attackfang)) {
            const uniqueRandomAngles = this.getThreeUniqueRandomNumbers([0, 200], [300, 360]);
            for (let angle of uniqueRandomAngles) {
                this.languajiaodus.push({ angle: angle, has: false });
            }
        }

        let skinLevel = 1;
        if (params && params.playerLevel === 4) {
            skinLevel = 5;
        }

        const spriteFrame = await this._loadRes(BundleNames.Common, `res/player/player7_${skinLevel}`, cc.SpriteFrame);
        this.img.spriteFrame = spriteFrame;
        console.log("当前随机角度", this.languajiaodus);
    }

    /**
     * 当节点禁用时清理冲击效果
     * 建议方法名：onNodeDisable
     */
    onDisable(): void {
        this.clearImpactEffect();
    }

    /**
     * 添加冲击效果
     * 建议方法名：addImpactEffect
     */
    async addImpactEffect(): Promise<void> {
        this.chongjiNode = NodePoolMag.instance.getNodeFromPool("chongji");
        if (!this.chongjiNode) {
            const prefab = await this._loadRes(BundleNames.Game, "prefabs/effpre/UI_ChongJi", cc.Prefab);
            NodePoolMag.instance.createNodePool("chongji", 1, prefab);
            this.chongjiNode = NodePoolMag.instance.getNodeFromPool("chongji");
        }
        this.chongjiNode.x = -40;
        this.chongjiNode.y = 0;
        this.auto_ui.node_effNode.addChild(this.chongjiNode);
    }

    /**
     * 清理冲击效果
     * 建议方法名：clearImpactEffect
     */
    clearImpactEffect(): void {
        if (this.chongjiNode) {
            NodePoolMag.instance.recycleNodeToPool("chongji", this.chongjiNode);
            this.chongjiNode = null;
        }
    }

    /**
     * 隐藏子弹
     * 建议方法名：hideBullet
     */
    hideBullet(): void {
        this.issend = false;
        this.clearImpactEffect();
        NodePoolMag.instance.recycleNodeToPool("bullet_3", this.node);
    }

    /**
     * 获取随机整数
     * @param min 最小值
     * @param max 最大值
     * @returns 随机整数
     * 建议方法名：getRandomInteger
     */
    getRandomInteger(min: number, max: number): number {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }

    /**
     * 获取三个唯一的随机数
     * @param range1 范围1
     * @param range2 范围2
     * @returns 随机数数组
     * 建议方法名：getThreeUniqueRandomNumbers
     */
    getThreeUniqueRandomNumbers(range1: [number, number], range2: [number, number]): number[] {
        const numbers: number[] = [];
        for (let i = range1[0]; i <= range1[1]; i++) {
            numbers.push(i);
        }
        for (let i = range2[0]; i <= range2[1]; i++) {
            numbers.push(i);
        }
        const uniqueNumbers: number[] = [];
        while (uniqueNumbers.length < 3) {
            const randomNum = numbers[this.getRandomInteger(0, numbers.length - 1)];
            if (!uniqueNumbers.includes(randomNum)) {
                uniqueNumbers.push(randomNum);
            }
        }
        return uniqueNumbers;
    }

    /**
     * 创建兰瓜
     * 建议方法名：createLanGua
     */
    createLanGua(): void {
        const parent = this.node.parent;
        if (parent) {
            const direction = cc.Vec2.subtract(cc.v2(), this.node.getPosition(), parent.getPosition());
            const angle = (180 / Math.PI) * Math.atan2(direction.y, direction.x) + 180;

            const checkAngle = (index: number) => {
                const langua = this.languajiaodus[index];
                if (!langua.has) {
                    const languaAngle = langua.angle;
                    if (Math.abs(angle - languaAngle) <= 10) {
                        langua.has = true;
                        const posX = this.node.x;
                        const posY = this.node.y;
                        this.scheduleOnce(() => {
                            this.createBulletExplosion(cc.v2(posX, posY));
                        });
                        this.languajiaodus[index] = langua;
                    }
                }
            };

            for (let i = 0; i < this.languajiaodus.length; i++) {
                checkAngle(i);
            }
        }
    }

    /**
     * 创建子弹爆炸
     * @param position 爆炸位置
     * 建议方法名：createBulletExplosion
     */
    async createBulletExplosion(position: cc.Vec2): Promise<void> {
        let bulletNode = NodePoolMag.instance.getNodeFromPool("bullet_2");
        if (!bulletNode) {
            const prefab = await this._loadRes(BundleNames.Game, "prefabs/bullet/bullet2", cc.Prefab);
            NodePoolMag.instance.createNodePool("bullet_2", 1, prefab);
            bulletNode = NodePoolMag.instance.getNodeFromPool("bullet_2");
        }
        bulletNode.x = position.x;
        bulletNode.y = position.y;
        GameGlobalVariable.languaNode.addChild(bulletNode);
        bulletNode.scale = 0;
        cc.tween(bulletNode).to(0.2, { scale: 1 }).start();

        const bulletComponent = bulletNode.getComponent(ViewBulletBomb);
        const bombBuff = BuffMgr.getDurianBomb(this.attackfang);
        bulletComponent.initializeBullet({
            attack: this.attack * GameGlobalVariable.liulianlanguabomb,
            attackfanwei: bombBuff.value[0],
            playerId: this.attackfang,
            skinlevel: 4,
            isbaoji: this.isbaoji
        }, cc.v2(position.x, position.y));
    }

    /**
     * 发送子弹1
     * 建议方法名：sendBullet1
     */
    sendBullet1(): void {
        const targetNode = GameGlobalVariable.paths.children[this.moveindex];
        if (targetNode) {
            if (this.moveindex === 5) {
                this.node.setPosition(targetNode.x, targetNode.y);
                this.moveindex -= 1;
            } else {
                const moveBullet = (remainingDistance: number) => {
                    const targetNode = GameGlobalVariable.paths.children[this.moveindex];
                    if (targetNode) {
                        const direction = cc.Vec2.subtract(cc.v2(), cc.v2(targetNode.x, targetNode.y), this.node.getPosition());
                        const angle = Math.atan2(direction.y, direction.x);
                        const distance = cc.Vec2.distance(this.node.getPosition(), cc.v2(targetNode.x, targetNode.y));
                        let moveDistance = remainingDistance;
                        let remainingMoveDistance = 0;

                        if (distance < moveDistance) {
                            remainingMoveDistance = moveDistance - distance;
                            moveDistance = distance;
                        }

                        this.node.x += Math.cos(angle) * moveDistance;
                        this.node.y += Math.sin(angle) * moveDistance;

                        if (remainingMoveDistance > 0) {
                            this.moveindex -= 1;
                            moveBullet(remainingMoveDistance);
                        }
                    } else {
                        this.hideBullet();
                    }
                };

                moveBullet(this.getBulletSpeed());
            }
            this.updateDirection();
        } else {
            this.hideBullet();
        }
    }

    /**
     * 更新方向
     * 建议方法名：updateDirection
     */
    updateDirection(): void {
        switch (this.moveindex) {
            case 4:
                this.auto_ui.node_effNode.angle = 0;
                break;
            case 3:
                this.auto_ui.node_effNode.angle = -90;
                break;
            case 2:
                this.auto_ui.node_effNode.angle = 180;
                break;
            case 1:
                this.auto_ui.node_effNode.angle = 90;
                break;
            case 0:
                this.auto_ui.node_effNode.angle = 0;
                break;
        }
    }

    /**
     * 获取子弹攻击力
     * @returns 子弹攻击力
     * 建议方法名：getBulletAttack
     */
    getBulletAttack(): number {
        return this.attack;
    }

    /**
     * 获取子弹速度
     * @returns 子弹速度
     * 建议方法名：getBulletSpeed
     */
    getBulletSpeed(): number {
        this.bulletspeed *= GameGlobalVariable.jiasuState;
        return this.bulletspeed;
    }

    /**
     * 更新方法
     * 建议方法名：onUpdate
     */
    onUpdate(deltaTime: number): void {
        if (this.issend) {
            this.node.children[0].angle += this.getBulletSpeed();
            this.sendBullet1();
            if (this.attackfang.playerInfo.equipLevel >= 4) {
                this.createLanGua();
            }
        }
    }
}

export default ViewBulletMove;